package _220327;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author ShadowLim
 * @create 2022-03-27-10:55
 */


public class 九宫幻方 {
//    // 旋转
//    static int[] case1 = {4,9,2,3,5,7,8,1,6};
//    static int[] case2 = {8,3,4,1,5,9,6,7,2};
//    static int[] case3 = {6,1,8,7,5,3,2,9,4};
//    static int[] case4 = {2,7,6,9,5,1,4,3,8};
//
//    // 翻转
//    static int[] case5 = {2,9,4,7,5,3,6,1,8};
//    static int[] case6 = {4,3,8,9,5,1,2,7,6};
//    static int[] case7 = {8,1,6,3,5,7,4,9,2};
//    static int[] case8 = {6,7,2,1,5,9,8,3,4};
//    static int[][] all = {case1, case2, case3, case4, case5, case6, case7, case8};
//
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int[] a = new int[9];
//        for (int i = 0; i < a.length; i++) {
//            a[i] = scanner.nextInt();
//        }
//        int[] res = new int[9];
//        int resNum = 0;
//        for (int[] arr : all) {
//            boolean flag = true;
//            for (int i = 0; i < arr.length; i++) {
//                if (arr[i] != a[i] && a[i] != 0) {
//                    flag = false;
//                }
//            }
//            if (flag) {
//                res = arr;
//                resNum++;
//            }
//        }
//        if (resNum == 1) {
//            for (int i = 0; i < 9; i++) {
//                System.out.print(res[i] + " ");
//                if ((i + 1) % 3 == 0) {
//                    System.out.println();
//                }
//            }
//        } else {
//            System.out.println("Too Many");
//        }
//    }


    /**
     * 利用了：每一行、每一列和每一条对角线的和都是相同的
     */
    static int[] map = new int[10];
    static int[] copyMap = new int[10];
    static int[] vis = new int[10];
    static int sum = 0;
    static boolean flag = false;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 9; i++) {
            map[i] = scanner.nextInt();
            if (map[i] != 0) {
                vis[map[i]] = 1;
            }
        }
        dfs(1);
        if (flag) {
            System.out.println("Too Many");
        } else {
            for (int i = 0; i < 9; i++) {
                System.out.print(copyMap[i] + " ");
                if ((i + 1) % 3 == 0) {
                    System.out.println();
                }
            }
        }
    }

    private static void dfs(int k) {
        if (k == 10) {
            int x1 = map[0] + map[1] + map[2];
            int x2 = map[3] + map[4] + map[5];
            int x3 = map[6] + map[7] + map[8];

            int y1 = map[0] + map[3] + map[6];
            int y2 = map[1] + map[4] + map[7];
            int y3 = map[2] + map[5] + map[8];

            int z1 = map[0] + map[4] + map[8];
            int z2 = map[2] + map[4] + map[6];

            if (x1 == x2 && x2 == x3 && x3 == y1 && y1 == y2 && y2 == y3
                && y3 == z1 && z1 == z2) {
                // 通过sum的值来判断是否有多个解
                if (++sum > 1) {
                    flag = true;
                } else {
                    copyMap = Arrays.copyOf(map, map.length);
                }
            }
            return;
        }
        // 如果这个数是初始就有的(小明留下的) 直接下一个
        if (vis[k] == 1) {
            dfs(k + 1);
            return;
        }
        for (int i = 0; i < 9; i++) {
            if (map[i] == 0) {
                map[i] = k;
                vis[k] = 1;
                dfs(k + 1);
                vis[k] = 0;
                map[i] = 0;
            }
        }
    }
}
